spark |
您所在的位置:网站首页 › idea sparkshell › spark |
SparkSQL是spark用来处理结构化的一个模块,它提供一个抽象的数据集DataFrame,并且是作为分布式SQL查询引擎的应用 注:本文所有操作是基于ambari工具,搭建好了 hdfs yarn hive spark mapReduce 等大数据常用的组件 一、进入spark命令窗口输入命令 spark-shell
以上是各种报错的部分截图,原因是spark操文件时,用的是hdfs系统,使用hdfs系统必须hdfs账号来操作, 为了解决上述问题,切换用户到hdfs用户即可 退出重新进入 切换hdfs用户 su hdfs 重新进入spark-shell spark-shell
现在完全正常了, 二、创建DataFrames 2.1、创建了一个数据集,实现了并行化val seq= Seq(("1","xiaoming",15),("2","xiaohong",20),("3","xiaobi",10)) var rdd1 = sc.parallelize(seq) 2.2、将当前的rdd对象转换为DataFrame对象(数据信息和数据结构信息存储到DataFrame) val df = rdd1.toDF("id","name","age") 三、查询数据操作 3.1、DSL 风格语法 df.select("name").show df.select("name","age").show //条件过滤 df.select("name","age").filter("age >10").show //参数必须是一个字符串,filter中的表达式也需要时一个字符串
3.1.1、参数是类名col (“列名”) df.select(“name”,“age”).filter(col(“age”) >10).show 3.1.2、分组统计个数df.groupBy("age").count().show() 3.1.3、打印DataFrame结构信息df.printSchema 3.2、SQL风格语法 DataFrame的一个强大之处就是我们可以将它看作是一个关系型数据表,然后可以通过在程序中使用spark.sql() 来执行SQL查询,结果将作为一个DataFrame返回。 如果想使用SQL风格的语法,需要将DataFrame注册成表,注册方式如下 df.registerTempTable("t_person") 表示 将DataFrame成t_person表 3.2.1 、查询年龄最大的前两名spark.sql("select * from t_person order by age desc limit 2").show 3.2.2、显示表的Schema信息spark.sql("desc t_person").show 3.2.3 、查询年龄大于30的人的信息spark.sql("select * from t_person where age > 10 ").show 3.3、DataSet 风格 3.3.1. 、 什么是DataSetDataSet是分布式的数据集合。DataSet是在Spark1.6中添加的新的接口。它集中了RDD的优点(强类型和可以用强大lambda函数)以及Spark SQL优化的执行引擎。DataSet可以通过JVM的对象进行构建,可以用函数式的转换(map/flatmap/filter)进行多种操作 3.3.2 、 DataFrame、DataSet、RDD的区别同样一组数据,分别形式如下 RDD中的长像: DataFrame中的长像 Dataset中的长像 DataSet包含了DataFrame的功能,Spark2.0中两者统一,DataFrame表示为DataSet[Row],即DataSet的子集。 (1)DataSet可以在编译时检查类型 (2)并且是面向对象的编程接口 相比DataFrame,Dataset提供了编译时类型检查,对于分布式程序来讲,提交一次作业太费劲了(要编译、打包、上传、运行),到提交到集群运行时才发现错误,这会浪费大量的时间,这也是引入Dataset的一个重要原因。 3.3.3 DataFrame与DataSet的互转DataFrame和DataSet可以相互转化。 (1)DataFrame转为 DataSet df.as[ElementType]这样可以把DataFrame转化为DataSet。 (2)DataSet转为DataFrame ds.toDF()这样可以把DataSet转化为DataFrame。 3.3.4. 创建DataSet3.3.4.1 、通过spark.createDataset创建 val ds = spark.createDataset(1 to 10)
3.3.4.2、通toDS方法生成DataSet 定义一个类 case class Person(name:String,age:Long) 定义一个类的集合 val data = List(Person("zhangsan",20),Person("lisi",30)) 转成DS val ds = data.toDS
查看DS ds.show
|
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |